package studystat;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class Planning {
	
	/**
	 * Velden
	 */
	//ISP waar de planning op gaat werken
	private List<Vak> isp;

	
	/**
	 * Methodes
	 */
	
	/**
	 * Maak een nieuw planning object aan
	 * @param isp	Het ISP van de planning
	 */
	public Planning(Student student) {
		this.isp = StudentManager.getInstance().getStudent(student.getGoogleAccount()).getVakken();
	}
	
	
	/**
	 * GET-methodes
	 */
	
	/**
	 * Geeft die ISP die op dit ogenblik in de planning opgeslagen is terug.
	 */
	public List<Vak> getISP() {
		return isp;
	}
	
	
	/**
	 * Eigen methodes
	 */
	
	/**
	 * Alle geplande activiteiten op een specifieke dag worden teruggegeven, chronologisch.
	 */
	public List<Les> getChrono(Calendar date) {
		List<Les> chronoLessen = new ArrayList<Les>();
		for(Vak vak: isp) {
			List<Les> lessen = vak.getLessen();
			for(Les les: lessen) {
				Calendar lesDate = les.getStartTijd();
				if(lesDate.get(Calendar.DAY_OF_MONTH) == date.get(Calendar.DAY_OF_MONTH) 
						&& lesDate.get(Calendar.MONTH) == date.get(Calendar.MONTH) 
						&& lesDate.get(Calendar.YEAR) == date.get(Calendar.YEAR)) {
					chronoLessen.add(les);
				}
			}
		}
		return chronoLessen;
	}
	
	/**
	 * Geeft alle activiteiten voor die week van dat vak
	 * @param cal	Een datum in de week waarin gezocht moet worden
	 * @param vak	Het vak waarvoor gezocht moet worden
	 * @return Lijst met alle lessen van dat vak, in die week
	 */
	public List<Les> getVak(Calendar cal, Vak vak) {
		List<Les> lesVak = new ArrayList<Les>();
		
		// Pas de datum aan zodat deze in het begin van de week start
		int millPerDay = 86400000;
		Date date = cal.getTime();
		switch(cal.get(Calendar.DAY_OF_WEEK)) {
		case Calendar.SUNDAY: date.setTime(date.getTime() - 6*millPerDay); break;
		case Calendar.MONDAY: break;
		case Calendar.TUESDAY: date.setTime(date.getTime() - 1*millPerDay); break;
		case Calendar.WEDNESDAY: date.setTime(date.getTime() - 2*millPerDay); break;
		case Calendar.THURSDAY: date.setTime(date.getTime() - 3*millPerDay); break;
		case Calendar.FRIDAY: date.setTime(date.getTime() - 4*millPerDay); break;
		case Calendar.SATURDAY: date.setTime(date.getTime() - 5*millPerDay); break;
		}
		
		//Overloop elke dag van de week en haal per dag de lessen van het vak eruit
		Date dateIt = date;
		Calendar calIt = Calendar.getInstance();
		for(int day = 0; day<=6; day++) {
			dateIt.setTime(date.getTime() + day*millPerDay);
			calIt.setTime(dateIt);
			List<Les> lessenDag = getChrono(calIt);
			for(Les lesDag : lessenDag) {
				if(lesDag.getVak().equals(vak)) {
					lesVak.add(lesDag);
				}
			}
		}
		
		return lesVak;	
	}

}
